
#include <iostream>
#include <string>
#include <limits>
#include <sstream>

/**
*@Author: Taoke
*@CreateTime: 2025-3
*@Version: 1.0
*/

using namespace std;

// 函数用于计算简单的算术表达式
double evaluateExpression(const string& expr) {
    istringstream iss(expr);
    double result = 0, value;
    char op = 0, prevOp = '+';

    iss >> result;
    while (iss >> op) {
        if (!(iss >> value)) {
            cerr << "表达式格式错误！" << endl;
            return 0;
        }
        switch (prevOp) {
        case '+': result += value; break;
        case '-': result -= value; break;
        case '*': result *= value; break;
        case '/':
            if (value == 0) {
                cerr << "不能除以0！" << endl;
                return 0;
            }
            result /= value;
            break;
        default:
            cerr << "未知操作符：" << prevOp << endl;
            return 0;
        }
        prevOp = op;
    }
    return result;
}

int main() {
    double total = 0, value;
    string input;
    char sign;

    bool firstInput = true; // 标记是否为第一次输入

    do {
        if (!firstInput) {
            // 显示当前结果
            cout << "结果: " << total << endl;
        }

        // 提示用户输入操作符或表达式
        if (firstInput) {
            cout << "请输入初始表达式（例如：1+1）：";
        }
        else {
            cout << "请输入操作（+，-，*，/，C退出，R重置）：";
            cin >> sign;
            cin.ignore(numeric_limits<streamsize>::max(), '\n'); // 忽略换行符

            switch (sign) {
            case 'C':
            case 'c':
                cout << "退出程序。" << endl;
                return 0;
            case 'R':
            case 'r':
                firstInput = true;
                total = 0;
                cout << "计算已重置。" << endl;
                continue;
            case '+':
            case '-':
            case '*':
            case '/':
                cout << (sign == '+' ? "加法" : (sign == '-' ? "减法" : (sign == '*' ? "乘法" : "除法"))) << endl;
                break;
            default:
                cerr << "未知操作: " << sign << endl;
                continue;
            }
        }

        // 提示用户输入数值或表达式
        cout << "请输入数值：";
        getline(cin, input); // 使用getline来读取整行输入

        // 如果是第一次输入，则计算表达式
        if (firstInput) {
            total = evaluateExpression(input);
            firstInput = false; // 重置标记
        }
        else {
            // 将输入转换为数值
            stringstream ss(input);
            if (!(ss >> value)) {
                cerr << "输入的值无效，请重试" << endl;
                continue;
            }

            // 执行计算
            switch (sign) {
            case '+': total += value; break;
            case '-': total -= value; break;
            case '*': total *= value; break;
            case '/':
                if (value == 0) {
                    cerr << "不能除以0!" << endl;
                }
                else {
                    total /= value;
                }
                break;
            }
        }
    } while (true);

    return 0;
}
